Spring Security 是一個用於保護和管理 Java 應用程式安全性的框架。它提供了身份驗證、授權和其他安全功能,可用於防止未經授權的訪問、數據外洩和其他安全威脅。
Spring Security 的主要特點和概念包括:
以下是一個簡單的 Spring Security 示例,演示如何配置 Spring Boot 應用程序以進行基本的身份驗證和授權。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
SecurityConfig
,除了定義一個基本的使用者帳戶,也設置了訪問控制規則,使用者必須在訪問某些頁面之前進行登錄,否則需要進行身份驗證。import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
@Configuration
@EnableWebSecurity
public class SecurityConfig {
// 定義一個 UserDetailsService Bean,這個 Bean 負責提供使用者詳細信息,包括使用者名稱、密碼和角色。
@Bean
public UserDetailsService userDetailsService() {
// 建立一個使用者帳戶,使用 withDefaultPasswordEncoder() 方法對密碼進行加密。
UserDetails user = User.withDefaultPasswordEncoder()
.username("user")
.password("password")
.roles("USER")
.build();
// 使用 InMemoryUserDetailsManager 來管理使用者詳細信息,這裡只有一個使用者。
return new InMemoryUserDetailsManager(user);
}
// 設置 Spring Security 的訪問控制規則
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests() // 定義哪些路徑可以被公開訪問
.antMatchers("/", "/home").permitAll() // 定義除了上面設置的路徑外,其他所有請求都需要驗證身份。
.anyRequest().authenticated()
.and()
.formLogin() // 指定登錄頁面的路徑。
.loginPage("/login")
.permitAll()
.and()
.logout()
.permitAll();
}
}
@Bean
用來定義一個 UserDetailsService
Bean,這個 Bean 用於提供使用者詳細資訊。我們在這裡使用 InMemoryUserDetailsManager
來管理我們的使用者帳戶。configure(HttpSecurity http)
方法中,我們設置了訪問控制規則。使用 antMatchers()
定義哪些路徑可以被公開訪問,使用 anyRequest().authenticated()
規定所有其他請求都需要驗證身份。formLogin()
設置了表單登錄的相關配置,包括登錄頁面的路徑。logout()
定義了登出操作的相關設定。以上,我們就完成了一個簡單的 Spring Security 範例,它可以根據我的應用程式需求進行更複雜的設置和規劃。
https://spring.io/projects/spring-security
https://www.baeldung.com/security-spring